package com.CuandoLlegaAndroid.Custom;

import com.CuandoLlegaAndroid.R;
import com.CuandoLlegaAndroid.R.id;
import com.CuandoLlegaAndroid.R.layout;
import com.CuandoLlegaAndroid.R.style;

import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;

public class CustomDialog extends Dialog {

	public CustomDialog(Context context, int theme) {
		super(context, theme);
	}

	public CustomDialog(Context context) {
		super(context);
	}

	/**
	 * Helper class for creating a custom dialog
	 */
	public static class Builder {

		private Context context;
		private String title;
		private String message;
		private String positiveButtonText;
		private String negativeButtonText;
		private View contentView;
		private CustomDialog customDialog;

		private DialogInterface.OnClickListener 
		positiveButtonClickListener,
		negativeButtonClickListener;

		public Builder(Context context) {
			this.context = context;
		}

		/**
		 * Set the Dialog message from String
		 */
		 public Builder setMessage(String message) {
			 this.message = message;
			 return this;
		 }

		 /**
		  * Set the Dialog message from resource
		  */
		 public Builder setMessage(int message) {
			 this.message = (String) context.getText(message);
			 return this;
		 }

		 /**
		  * Set the Dialog title from resource
		  */
		 public Builder setTitle(int title) {
			 this.title = (String) context.getText(title);
			 return this;
		 }

		 /**
		  * Set the Dialog title from String
		  */
		 public Builder setTitle(String title) {
			 this.title = title;
			 return this;
		 }

		 /**
		  * Set a custom content view for the Dialog.
		  * If a message is set, the contentView is not
		  * added to the Dialog...
		  */
		 public Builder setContentView(View v) {
			 this.contentView = v;
			 return this;
		 }

		 /**
		  * Set the positive button resource and it's listener
		  */
		 public Builder setPositiveButton(int positiveButtonText,
				 DialogInterface.OnClickListener listener) {
			 this.positiveButtonText = (String) context
			 .getText(positiveButtonText);
			 this.positiveButtonClickListener = listener;
			 return this;
		 }

		 /**
		  * Set the positive button text and it's listener
		  */
		 public Builder setPositiveButton(String positiveButtonText,
				 DialogInterface.OnClickListener listener) {
			 this.positiveButtonText = positiveButtonText;
			 this.positiveButtonClickListener = listener;
			 return this;
		 }

		 /**
		  * Set the negative button resource and it's listener
		  */
		 public Builder setNegativeButton(int negativeButtonText,
				 DialogInterface.OnClickListener listener) {
			 this.negativeButtonText = (String) context
			 .getText(negativeButtonText);
			 this.negativeButtonClickListener = listener;
			 return this;
		 }

		 /**
		  * Set the negative button text and it's listener
		  */
		 public Builder setNegativeButton(String negativeButtonText,
				 DialogInterface.OnClickListener listener) {
			 this.negativeButtonText = negativeButtonText;
			 this.negativeButtonClickListener = listener;
			 return this;
		 }

		 /**
		  * Create the custom dialog
		  */
		 public CustomDialog create() {
			 LayoutInflater inflater = (LayoutInflater) context
			 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
			 // instantiate the dialog with the custom Theme
			 final CustomDialog dialog = new CustomDialog(context, 
					 R.style.Dialog);
			 View layout = inflater.inflate(R.layout.dialog, null);
			 dialog.addContentView(layout, new LayoutParams(
					 LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

			 boolean hasTitle=false;

			 // set the dialog title
			 TextView textTitle = ((TextView) layout.findViewById(R.id.title));
			 if(title== null){
				 textTitle.setVisibility(View.GONE);
			 }else{
				 hasTitle = true;
				 textTitle.setVisibility(View.VISIBLE);
				 textTitle.setText(title);
			 }

			 // set the confirm button
			 if (positiveButtonText != null) {
				 ((Button) layout.findViewById(R.id.positiveButton))
				 .setText(positiveButtonText);
				 if (positiveButtonClickListener != null) {
					 ((Button) layout.findViewById(R.id.positiveButton))
					 .setOnClickListener(new View.OnClickListener() {
						 public void onClick(View v) {
							 positiveButtonClickListener.onClick(
									 dialog, 
									 DialogInterface.BUTTON_POSITIVE);
						 }
					 });
				 }
			 } else {
				 // if no confirm button just set the visibility to GONE
				 layout.findViewById(R.id.positiveButton).setVisibility(
						 View.GONE);
			 }
			 // set the cancel button
			 if (negativeButtonText != null) {
				 ((Button) layout.findViewById(R.id.negativeButton))
				 .setText(negativeButtonText);
				 if (negativeButtonClickListener != null) {
					 ((Button) layout.findViewById(R.id.negativeButton))
					 .setOnClickListener(new View.OnClickListener() {
						 public void onClick(View v) {
							 positiveButtonClickListener.onClick(
									 dialog, 
									 DialogInterface.BUTTON_NEGATIVE);
						 }
					 });
				 }
			 } else {
				 // if no confirm button just set the visibility to GONE
				 layout.findViewById(R.id.negativeButton).setVisibility(
						 View.GONE);
			 }


			 // set the content message
			 boolean hasMessage = true;
			 if (message != null) {
				 ((TextView) layout.findViewById(
						 R.id.message)).setText(message);
			 } else if (contentView != null) {
				 // if no message set
				 // add the contentView to the dialog body
				 ((LinearLayout) layout.findViewById(R.id.content))
				 .removeAllViews();
				 ((LinearLayout) layout.findViewById(R.id.content))
				 .addView(contentView, 
						 new LayoutParams(
								 LayoutParams.FILL_PARENT, 
								 LayoutParams.FILL_PARENT));
			 }
			 else{
				 hasMessage = false;
				 ((TextView) layout.findViewById(
						 R.id.message)).setVisibility(View.GONE);
			 }

			 if(hasTitle && hasMessage){
				 ((ImageButton)layout.findViewById(R.id.titledivider)).setVisibility(View.VISIBLE);
			 }else{
				 ((ImageButton)layout.findViewById(R.id.titledivider)).setVisibility(View.GONE);
			 }

			 dialog.setContentView(layout);
			 customDialog = dialog;
			 return customDialog;
		 }
		 
		 public CustomDialog getDialog()
		 {
			 return customDialog;
		 }

	}

}